package com.andy.note.main.jsoup.gdhtcm;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import cn.hutool.core.util.ReUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

/**
 * 
 * 爬取中医学院骨科所有医生
 *
 * @author Andy<908119428@qq.com>
 * @version $Revision: 1.1 $ $Date: 2021年7月29日 下午4:40:22 $
 */
public class GetDoctor {

    public static void main(String[] args) throws Exception {
        
        // 网址
        String url = "http://www.gdhtcm.com/sitecn/departmentsList.aspx?zkid=DK15";
        
        // 正则 匹配所有医生的标签
        String regex = "<a href=\"ExpertInfoByDoctorID\\.aspx\\?id=\\w{4,5}\">([\\u4e00-\\u9fa5]{0,3})</a>";
        Document document = Jsoup.connect(url).get();
        
        // 获取所有a标签
        Elements a = document.getElementsByTag("a");
        
        // 匹配符合正则，含有医生名的连接，并且去掉前后标签
        List<String> list = new ArrayList<>();
        for (Element e : a) {
            String context = e.toString();
            if(ReUtil.isMatch(regex, context)) {
                String name = e.text();
                list.add(name);
            }
        }
        
        // 去重
        List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
        
        System.err.println("原： " + list.size() + " , 去重后： " + distinctList.size());
        
        //通过工具类创建writer
        ExcelWriter writer = ExcelUtil.getWriter("e:/desktop/writeTest.xlsx");
        writer.passCurrentRow();
        writer.write(distinctList);
        writer.close();
        
        
    }
}
